/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ipodhash.hash;

/**
 *
 * @author Tarcisio
 */
public class FunctionHash {

    public static int hash1Ou2Ou3(String Chave, int function) {
        int position;
        String chave;
        chave = Chave;
        switch (function) {
            case 1:
                position = FunctionHash.HashAlfaNumerico(chave);
                break;
            case 2:
                position = FunctionHash.HashEnlaDesloc(chave);
                break;
            case 3:
                position = FunctionHash.HashTrasnfRaiz(chave);
                break;
            default:
                position = FunctionHash.HashAlfaNumerico(chave);
        }
        return position;
    }

    public static int HashAlfaNumerico(String Chave) {
        int position = 0;
        String chave = Chave;

        /***************************************/
        /*** Vou pegar os numeros das chaves ***/
        /***************************************/
        //estou pegando os 8 primeiros numeros
        String parte1 = Chave.substring(3, 11);
        //agora os dois ultimos
        int parte2 = Integer.parseInt(Chave.substring(11, 13));
        //agora pego a parte2 e somo com o numero corespendente ao caracter na tabela ASC
        int parte3 = Chave.charAt(14)+parte2;
        //agora pego a parte3 e somo com o numero corespendente ao caracter na tabela ASC
        int parte4 = Chave.charAt(15)+parte3;
        //agora pego a parte4 e somo com o numero corespendente ao caracter na tabela ASC
        int parte5 = Chave.charAt(16)+parte4;

        String nume = parte4+parte3+parte2+parte1+parte5;
        System.out.println(nume);
        double numerozao = Double.parseDouble(nume);

        double position1;
        position1 = Math.sin(Math.toRadians(numerozao));


        position = Math.abs((int)(position1 * 100));

        return position;

    }

    public static int HashEnlaDesloc(String Chave) {
        int position;
        String chave = Chave;
        String parte1 = chave.substring(3, 6);
        int soma1 = Integer.parseInt(parte1);
        String parte2 = chave.substring(6, 9);
        int soma2 = Integer.parseInt(parte2);
        String parte3 = chave.substring(9, 12);
        int soma3 = Integer.parseInt(parte3);
        String parte4 = chave.substring(12, 13);
        int carac = (int) chave.charAt(14);
        parte4 = parte4+carac;
        int soma4 = Integer.parseInt(parte4);
        
        position = (soma1 + soma2 + soma3 + soma4) % 100;
        return position;
    }

    public static int HashTrasnfRaiz(String Chave){
        int position;
        String parte1 = Chave.substring(3, 11);
        String parte4 = Chave.substring(13, 14);

        int total;
        total = Integer.parseInt(parte1);
        total = total + (int)parte4.charAt(0);

        System.out.println(total);

        String result = Integer.toOctalString(total);

        position = Integer.parseInt(result);

        position = position % 100;

        return position;
    }
}
